package main

import "fmt"

// 有 n 个 (id, value) 对，其中 id 是 1 到 n 之间的一个整数，value 是一个字符串。
// 不存在 id 相同的两个 (id, value) 对。

// 设计一个流，以 任意 顺序获取 n 个 (id, value) 对，并在多次调用时 按 id 递增的顺序 返回一些值。

// 实现 OrderedStream 类：

// OrderedStream(int n) 构造一个能接收 n 个值的流，并将当前指针 ptr 设为 1 。
// String[] insert(int id, String value) 向流中存储新的 (id, value) 对。存储后：
// 如果流存储有 id = ptr 的 (id, value) 对，则找出从 id = ptr 开始的 最长 id 连续递增序列 ，并 按顺序 返回与这些 id 关联的值的列表。然后，将 ptr 更新为最后那个  id + 1 。
// 否则，返回一个空列表。

type Value string
type OrderedStream struct {
	n      int
	values []Value
	ptr    int
}

func Constructor(n int) OrderedStream {
	return OrderedStream{
		n:      n,
		values: make([]Value, n+1),
		ptr:    1,
	}
}

func (this *OrderedStream) Insert(idKey int, value string) []string {
	this.values[idKey] = Value(value)
	// 找id递增

	var res []string
	if idKey == this.ptr {
		var i = this.ptr
		for i = this.ptr ; i <= this.n && this.values[i] != ""; i++ {
			res = append(res, string(this.values[i]))
		}
		this.ptr = i
	}
	return res
}

/**
 * Your OrderedStream object will be instantiated and called as such:
 * obj := Constructor(n);
 * param_1 := obj.Insert(idKey,value);
 */

 func main() {
	o:= Constructor(5)
	r:=o.Insert(3,"cccc")
	fmt.Println(o,r)
	r = o.Insert(1,"aaaa")
	fmt.Println(o,r)

 }